home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / gkismet / ClistWindow.pm < prev    next >
Text File  |  2005-10-20  |  5KB  |  190 lines

  1. #!/usr/bin/perl -w
  2. #
  3. # $Id: ClistWindow.pm,v 1.11 2003/07/10 16:51:43 solovam Exp $
  4. #
  5. # This file is a part of gkismet
  6. #
  7. # This program is free software; you can redistribute it and/or
  8. # modify it under the terms of the GNU General Public License
  9. # as published by the Free Software Foundation; either version 2
  10. # of the License, or (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20. #
  21.  
  22. #
  23. # ClistWindow class
  24. #
  25. package ClistWindow;
  26.  
  27. use Gtk;
  28. use Misc;
  29. use BssConnObserver;
  30. use strict;
  31. @ClistWindow::ISA = qw(BssConnObserver);
  32.  
  33. #
  34. # Constructor
  35. #
  36. sub new
  37. {
  38.     my $type = shift;
  39.     my $self = new BssConnObserver(@_);
  40.     bless $self, $type;
  41.  
  42.     # Main window
  43.     my $window = new Gtk::Window('dialog');
  44.     $window->signal_connect("delete_event", sub {$self->deleteHandler()});
  45.     $window->set_default_size(Gtk::Gdk->screen_width() * 0.8, Gtk::Gdk->screen_height() * 0.5);
  46.     $window->set_title($self->getWindowName() . ' ' . $self->{'connection'}->getNetwork()->{$self->{'bssid'}}{'ssid'} . ' ' . $self->{'bssid'});
  47.     $self->{'window'} = $window;
  48.  
  49.     # Scrolled window
  50.     my $scrolledWindow = new Gtk::ScrolledWindow(undef, undef);
  51.  
  52.     # Clist
  53.     my @titles = $self->getColumnTitles();
  54.     my $clist = new_with_titles Gtk::CList(@titles);
  55.     for(my $i = 0; $i <= $#titles; $i++)
  56.     {
  57.         $clist->set_column_auto_resize($i, $true);
  58.     }
  59.     $self->{'clist'} = $clist;
  60.     $self->{'clist'}->set_selectable($false);
  61.     $self->{'nRows'} = 0;
  62.  
  63.     # Buttonbox, buttons
  64.     my $bbox = new Gtk::HButtonBox();
  65.     $bbox->set_layout('spread');
  66.     $bbox->set_spacing(5);
  67.     my $buttonClose = new Gtk::Button("Close");
  68.     $buttonClose->signal_connect( "clicked", sub {$self->closeClicked()});
  69.     $bbox->add($buttonClose);
  70.     my $buttonPause = new Gtk::Button("Pause");
  71.     $buttonPause->signal_connect( "clicked", sub {$self->pauseClicked($buttonPause)});
  72.     $bbox->add($buttonPause);
  73.  
  74.     # Assemble all
  75.     $scrolledWindow->add($clist);
  76.     $self->{'scrolledWindow'} = $scrolledWindow;
  77.     my $vbox = new Gtk::VBox($false, 0);
  78.     $vbox->pack_start($scrolledWindow, $true, $true, 0);
  79.     $vbox->pack_end($bbox, $false, $false, 10);
  80.     $window->add($vbox);
  81.     $window->show_all();
  82.  
  83.     # Misc
  84.     $self->{'paused'} = $false;
  85.  
  86.     # Activate connection
  87.     $self->activateConnection();
  88.     $self->{'connection'}->addObserver($self);
  89.  
  90.     return $self;
  91. }
  92.  
  93. #
  94. # Close window
  95. #
  96. sub close
  97. {
  98.     my $self = shift;
  99.     $self->deactivateConnection();
  100.     $self->SUPER::close();
  101. }
  102.  
  103. #
  104. # Pause button clicked
  105. #
  106. sub pauseClicked
  107. {
  108.     my $self = shift;
  109.     my $button = shift;
  110.     if($self->{'paused'} == $false)
  111.     {
  112.         $self->{'paused'} = $true;
  113.         $button->child()->set("Resume");
  114.     }
  115.     else
  116.     {
  117.         $self->{'paused'} = $false;
  118.         my $label = new Gtk::Label('Pause');
  119.         $button->child()->set("Pause");
  120.     }
  121.     return($true);
  122. }
  123.  
  124. #
  125. # Get widget
  126. #
  127. sub getWidget
  128.     my $self = shift;
  129.     return $self->{'window'};
  130. }
  131.  
  132. #
  133. # Handle an update from an observable
  134. #
  135. sub update
  136. {
  137.     my $self = shift;
  138.     my $object = shift;
  139.     my $data = shift;
  140.  
  141.     if($object->isa('Connection') && $self->{'connection'} eq $object)
  142.     {
  143.         if($self->isInterstingUpdate($data) && $self->{'paused'} == $false)
  144.         {
  145.             my @columns = $self->getColumnData();
  146.  
  147.             $self->{'clist'}->freeze();
  148.  
  149.             # Save scrolling settings
  150.             my $adjustment = $self->{'scrolledWindow'}->get_vadjustment();
  151.                         my $value = $adjustment->get_value();
  152.                         my $page_size = $adjustment->page_size();
  153.                         my $step_increment = $adjustment->step_increment();
  154.                         my $upper = $adjustment->upper();
  155.  
  156.             $self->{'clist'}->append(@columns);
  157.             $self->{'nRows'}++;
  158.             # Keep old row in focus (wow! what a messy business!)
  159.                         $adjustment->set_value($value);
  160.  
  161.             if($self->{'nRows'} > $self->getWindowDepth())
  162.             {
  163.                 $self->{'clist'}->remove(0);
  164.                 $self->{'nRows'}--;
  165.                 # Still keep old row in focus
  166.                 $adjustment->set_value($value - $step_increment - 1);
  167.             }
  168.  
  169.             # If we are scrolled to the bottom, advance to the end
  170.             if($value + $page_size >= $upper)
  171.             {
  172.                 $adjustment->set_value($value + $step_increment + 1);
  173.             }
  174.             # Take care of starting being scrolled to the bottom
  175.             elsif($value == 0 && $page_size + $step_increment >= $upper)
  176.             {
  177.                 $adjustment->set_value($upper);
  178.             }
  179.  
  180.             $adjustment->value_changed();
  181.  
  182.             $self->{'clist'}->thaw();
  183.  
  184.         }
  185.     }
  186. }
  187.  
  188. 1;
  189.